package com.gmail.ceac13;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class FriendDao {
	
	private SQLiteDatabase database;
	private FriendOpenHelper helper;
	
	/**
	 * Contrutor padrao
	 * @param context
	 */
	FriendDao(Context context) {
		helper = new FriendOpenHelper(context);
	}
	
	
	/**
	 * Cria com amigo com os parametos passados.
	 * @param friend
	 */
	public void createFriend(Friend friend) {
		database = helper.getWritableDatabase();
		String sql = "INSERT INTO Friend (id,nome,email,id_foto,distancia,posicao,ultima_atualizacao) VALUES (?,?,?,?,?,?)";
		Object[] Args = {friend.getId(),friend.getNome(),friend.getEmail(),friend.getFoto(),friend.getDistancia(),friend.getPosicao(),friend.getUltima_atualizacao()};
		database.execSQL(sql,Args);
	}
		
	
	/**
	 * Atualiza o amigo passado como parametro. 
	 * Obs: nao testei esse metodo ainda. 
	 * @param friend
	 */
	public void updateFriend(Friend friend) {
		database = helper.getWritableDatabase();
		String sql = "UPDATE Friend SET (nome,id_foto,email,distancia,posicao,ultima_atualizacao) VALUES (?,?,?,?,?) WHERE id = ?";
		Object[] selectionArgs = {friend.getNome(),friend.getFoto(),friend.getEmail(),friend.getDistancia(),friend.getPosicao(),friend.getUltima_atualizacao()};
		database.execSQL(sql,selectionArgs);
	}
	
	/**
	 * Método que remove todas as linhas da tabela de amigos e preenche com
	 * a lista de amigos passada como parãmetro.
	 * @param amigos
	 */
	public void syncronizerFriend(List<Friend> amigos) {
		database = helper.getWritableDatabase();
		
		database.execSQL(FriendOpenHelper.CLEAR);
		
		for(Friend amigo:amigos) {
			Object[] selectionArgs = {amigo.getId(),amigo.getNome(),amigo.getEmail(), amigo.getFoto(),amigo.getDistancia(),amigo.getPosicao(),amigo.getUltima_atualizacao()};
			database.execSQL(FriendOpenHelper.INSERCAO, selectionArgs);
		}
		
		
	}
	
	/**
	 * Busca um amigo pela chave primaria. retorna null caso não exista
	 * @param id
	 * @return Friend com o id passado como parametro.
	 */
	public Friend findFriendByPrimaryKey(int id) {
		database = helper.getReadableDatabase();
		String sql = "SELECT id, nome,email, id_foto, distancia,posicao,ultima_atualizacao FROM Friend WHERE id = ?";
		String[] selectionArgs = {String.valueOf(id)};	
		Cursor result = database.rawQuery(sql, selectionArgs);
		result.moveToFirst();
		if (result.getCount() > 0) {
			Friend friend = new Friend();
			friend.setId(result.getInt(0));
			friend.setNome(result.getString(1));
			friend.setEmail(result.getString(2));
			//friend.setFoto(result.getInt(3));
			friend.setFoto(result.getString(3));
			friend.setDistancia(result.getInt(4));
			friend.setPosicao(result.getString(5));
			friend.setUltima_atualizacao(result.getString(6));
			result.close();
			return friend;
		}
		result.close();
		return null;
		
	}
	
	/**
	 * busca todos os amigos da base de dados.
	 * @return
	 */
	public List<Friend> findAllFriends() {
		database = helper.getReadableDatabase();
		String sql = "SELECT id, nome, email, id_foto, distancia,posicao,ultima_atualizacao FROM Friend ORDER BY distancia ASC";
		Cursor result = database.rawQuery(sql, null);
		result.moveToFirst();
		List<Friend> friends = new ArrayList<Friend>();
		if (result.getCount() > 0) {
			for(int i = 0; i < result.getCount();i++) {
				Friend friend = new Friend();
				friend.setId(result.getInt(0));
				friend.setNome(result.getString(1));
				friend.setEmail(result.getString(2));
				//friend.setFoto(result.getInt(3));
				friend.setFoto(result.getString(3));
				friend.setDistancia(result.getInt(4));
				friend.setPosicao(result.getString(5));
				friend.setUltima_atualizacao(result.getString(6));
				friends.add(friend);
				result.moveToNext();
			}
		}
		result.close();
		
		return friends; 
	}
	
	/**
	 * 
	 * @param id
	 */
	public void deleteFriend(int id) {
		database = helper.getWritableDatabase();
		String sql = "DELETE from Friend WHERE id = ?;";
		Object[] bindArgs = {id};
		database.execSQL(sql, bindArgs);
	}

}
